/**
 * 
 */
package com.attilax.ocr;

/**
 * @author attilax
 *2016年11月1日 下午9:49:44
 */

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;

import org.apache.commons.io.FileUtils;

import com.attilax.encode.filex;
import com.attilax.exception.ExUtil;
import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;

//import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;

public class ImageIOHelper {
	/**
	 * 图片文件转换为tif格式
	 * @param imageFile 文件路径
	 * @param imageFormat 文件扩展名
	 * @return
	 */
	public static File createImage(File imageFile, String imageFormat) {
		File tempFile = null;
		try {
			Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(imageFormat);
			ImageReader reader = readers.next();
		
			ImageInputStream iis = ImageIO.createImageInputStream(imageFile);
			reader.setInput(iis);
			//Read the stream metadata
			IIOMetadata streamMetadata = reader.getStreamMetadata();
			
			//Set up the writeParam
			TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);
			tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);
			
			//Get tif writer and set output to file
			Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
			ImageWriter writer = writers.next();
			
			BufferedImage bi = reader.read(0);
			IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0));
			tempFile = tempImageFile(imageFile);
			
			String pathname = "c:\\00ocr-dbg";
			com.attilax.io.filex.createAllPath(pathname+"/ttt.tiff");
		
			ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);
			writer.setOutput(ios);
			writer.write(streamMetadata, image, tiffWriteParam);
			ios.close();
			
			writer.dispose();
			reader.dispose();
			FileUtils.copyFileToDirectory(tempFile, new File( pathname)); 
			
		} catch (IOException e) {
			ExUtil.throwExV2(e);
		}
		return tempFile;
	}

	private static File tempImageFile(File imageFile) {
//		String path = imageFile.getPath();
//		StringBuffer strB = new StringBuffer(path);
//		strB.insert(path.lastIndexOf('.'),0); 
// 		return new File(strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif"));
 	return new File(imageFile.getAbsolutePath()+".tif");
	}

}